home *** CD-ROM | disk | FTP | other *** search
/ System Booster / System Booster.iso / Archives / GNU / GNUPLOTsrc.lha / term / vws.trm < prev    next >
Encoding:
Text File  |  1996-01-22  |  10.5 KB  |  374 lines

  1. /*
  2.  * $Id: vws.trm,v 1.7 1995/12/20 21:48:20 drd Exp $
  3.  *
  4.  */
  5.  
  6. /* GNUPLOT - vws.trm */
  7. /*
  8.  * Copyright (C) 1990 - 1993
  9.  *
  10.  * Permission to use, copy, and distribute this software and its
  11.  * documentation for any purpose with or without fee is hereby granted,
  12.  * provided that the above copyright notice appear in all copies and
  13.  * that both that copyright notice and this permission notice appear
  14.  * in supporting documentation.
  15.  *
  16.  * Permission to modify the software is granted, but not the right to
  17.  * distribute the modified code.  Modifications are to be distributed
  18.  * as patches to released version.
  19.  *
  20.  * This software  is provided "as is" without express or implied warranty.
  21.  *
  22.  * This file is included by ../term.c.
  23.  *
  24.  * This terminal driver supports:
  25.  *   IRIS terminals
  26.  *
  27.  * AUTHORS
  28.  *   Walter Speth
  29.  *           BITNET: SPETH@DBNPIB5
  30.  *
  31.  * send your comments or suggestions to (info-gnuplot@dartmouth.edu).
  32.  *
  33.  */
  34. /*
  35.  * adapted to the new terminal layout by Stefan Bodewig (Dec. 1995)
  36.  */
  37.  
  38. #ifndef GOT_DRIVER_H
  39. #include "driver.h"
  40. #endif
  41.  
  42. #ifdef TERM_REGISTER
  43. register_term(vws)
  44. #endif
  45.  
  46. #ifdef TERM_PROTO
  47. TERM_PUBLIC void VWS_init __P((void));
  48. TERM_PUBLIC void VWS_reset __P((void));
  49. TERM_PUBLIC int VWS_scale __P((double xs, double ys));
  50. TERM_PUBLIC void VWS_graphics __P((void));
  51. TERM_PUBLIC void VWS_text __P((void));
  52. TERM_PUBLIC void VWS_move __P((unsigned int x, unsigned int y));
  53. TERM_PUBLIC void VWS_vector __P((unsigned int x, unsigned int y));
  54. TERM_PUBLIC void VWS_linetype __P((int lt));
  55. TERM_PUBLIC void VWS_put_text __P((unsigned int x, unsigned int y, char * str));
  56. TERM_PUBLIC int VWS_text_angle __P((int ang));
  57. TERM_PUBLIC int VWS_justify_text __P((enum JUSTIFY mode));
  58. TERM_PUBLIC void VWS_point __P((unsigned int x, unsigned int y, int point));
  59. TERM_PUBLIC void VWS_arrow __P((unsigned int sx, unsigned int sy, unsigned int ex, unsigned int ey, int head));
  60.  
  61. #define VWS_XMAX 1024
  62. #define VWS_YMAX 780
  63. #define VWS_VCHAR 25
  64. #define VWS_HCHAR 15
  65. #define VWS_VTIC 10
  66. #define VWS_HTIC 10
  67. #endif /* TERM_PROTO */
  68.  
  69. #ifndef TERM_PROTO_ONLY
  70. #ifdef TERM_BODY 
  71. void VWS_resize_ast __P((void));
  72.  
  73. #include <stdio.h>
  74. /*
  75. #include <math.h>
  76. #include <ssdef.h>
  77. */
  78. #include <descrip.h>
  79.  
  80. #include <uisentry.h>
  81. #include <uisusrdef.h>
  82.  
  83. #define DEFAULT_ATTR 0
  84. #define OVER_ATTR 1
  85. #define ERAS_ATTR 2
  86. #define BIS_ATTR 3
  87. #define COLOR_ATTR 4
  88. #define TEXT_ATTR 5
  89. #define LINE_ATTR 6
  90. #define BACK_ATTR 7
  91.  
  92. float current_x, current_y;
  93.  
  94. int vd_id, wd_id;
  95. int vcm_id;
  96.  
  97. static $DESCRIPTOR(ws_devname, "SYS$WORKSTATION");
  98. static $DESCRIPTOR(vd_title, "gnuplot");
  99.  
  100. static float x0, y0, xsiz, ysiz,
  101.              wc_xmin_new, wc_ymin_new, wc_xmax_new, wc_ymax_new,
  102.              wc_xmin, wc_ymin, wc_xmax, wc_ymax,
  103.              vd_width, vd_height;
  104.  
  105. void VWS_resize_ast()
  106. {
  107.   uis$resize_window(&vd_id, &wd_id, &x0, &y0, &xsiz, &ysiz,
  108.             &wc_xmin, &wc_ymin, &wc_xmax, &wc_ymax);
  109.   replotrequest();
  110. }
  111. /****************************************************************************/
  112. TERM_PUBLIC void VWS_init()
  113. {
  114.   int i;
  115.   int cattr;
  116.   $DESCRIPTOR(a_font,"DTABER0003WK00PG0001UZZZZ02A000");
  117.   const int i0=0, i1=1, i2=2, i3=3, i4=4, i5=5, i6=6, i7=7, i8=8;
  118.   const float p0=0.0, p1=0.1, p2=0.2, p3=0.3, p4=0.4;
  119.   const float p5=0.5, p6=0.6, p7=0.7, p8=0.8, p9=0.9;
  120.   const int n1=0xFFFFFFFF;
  121.   const int uis$c_mode_over = UIS$C_MODE_OVER;
  122.   const int uis$c_mode_eras = UIS$C_MODE_ERAS;
  123.   const int uis$c_mode_bis = UIS$C_MODE_BIS;
  124.   const float vws_hchar = (float) VWS_HCHAR;
  125.   const float vws_vchar = (float) VWS_VCHAR;
  126.   const int default_attr = DEFAULT_ATTR;
  127.   const int over_attr = OVER_ATTR;
  128.   const int eras_attr = ERAS_ATTR;
  129.   const int bis_attr = BIS_ATTR;
  130.   const int color_attr = COLOR_ATTR;
  131.   const int text_attr = TEXT_ATTR;
  132.   const int line_attr = LINE_ATTR;
  133.   const int back_attr = BACK_ATTR;
  134.  
  135.   vd_width  = 14;
  136.   vd_height = 10;        /* aspect sqrt(2) as DIN A paper */
  137.  
  138.   wc_xmin = 0.0;
  139.   wc_ymin = 0.0;
  140.   wc_xmax = (float) VWS_XMAX;
  141.   wc_ymax = (float) VWS_YMAX;
  142.  
  143.   vcm_id = uis$create_color_map(&i8);
  144.  
  145.   vd_id = uis$create_display(&wc_xmin, &wc_ymin, &wc_xmax, &wc_ymax,
  146.                              &vd_width, &vd_height, &vcm_id);
  147.  
  148.   uis$set_color(&vd_id, &i0, &p5, &p5, &p5);
  149.   uis$set_color(&vd_id, &i1, &p0, &p0, &p0);
  150.   uis$set_color(&vd_id, &i2, &p0, &p0, &p0);
  151.   uis$set_color(&vd_id, &i3, &p0, &p0, &p0);
  152.   uis$set_color(&vd_id, &i4, &p0, &p0, &p0);
  153.   uis$set_color(&vd_id, &i5, &p0, &p0, &p0);
  154.   uis$set_color(&vd_id, &i6, &p0, &p0, &p0);
  155.   uis$set_color(&vd_id, &i7, &p0, &p0, &p0);
  156.  
  157. /*
  158.   uis$set_color(&vd_id, &i2, &p2, &p2, &p2);
  159.   uis$set_color(&vd_id, &i3, &p3, &p3, &p3);
  160.   uis$set_color(&vd_id, &i4, &p4, &p4, &p4);
  161.   uis$set_color(&vd_id, &i5, &p5, &p5, &p5);
  162.   uis$set_color(&vd_id, &i6, &p6, &p6, &p6);
  163.   uis$set_color(&vd_id, &i7, &p7, &p7, &p7);
  164.   
  165.   /* perhaps better for color terms (which I do not have)
  166.      uis$set_color(&vd_id, &i0, &0p0, &0p0, &0p0);
  167.      uis$set_color(&vd_id, &i1, &0p9, &0p0, &0p0);
  168.      uis$set_color(&vd_id, &i2, &0p0, &0p9, &0p0);
  169.      uis$set_color(&vd_id, &i3, &0p9, &0p9, &0p0);
  170.      uis$set_color(&vd_id, &i4, &0p0, &0p0, &0p9);
  171.      uis$set_color(&vd_id, &i5, &0p9, &0p0, &0p9);
  172.      uis$set_color(&vd_id, &i6, &0p0, &0p9, &0p9);
  173.      uis$set_color(&vd_id, &i7, &0p9, &0p9, &0p9);
  174.      /*
  175.       */
  176.   uis$disable_display_list(&vd_id);
  177.  
  178.   wd_id = uis$create_window(&vd_id, &ws_devname, &vd_title,
  179.                             &wc_xmin, &wc_ymin, &wc_xmax, &wc_ymax,
  180.                             &vd_width, &vd_height);
  181.  
  182.   uis$set_resize_ast(&vd_id, &wd_id, &VWS_resize_ast, &i0,
  183.                      &x0, &y0, &xsiz, &ysiz,
  184.                      &wc_xmin_new, &wc_ymin_new, &wc_xmax_new, &wc_ymax_new);
  185.  
  186.   uis$set_writing_mode(&vd_id, &default_attr, &over_attr, &uis$c_mode_over);
  187.   uis$set_writing_mode(&vd_id, &default_attr, &eras_attr, &uis$c_mode_eras);
  188.   uis$set_writing_mode(&vd_id, &default_attr, &bis_attr, &uis$c_mode_bis);
  189. /*
  190.   for (i=0; i<8; i++) {
  191.   cattr = COLOR_ATTR+i;
  192.   uis$set_writing_index(&vd_id, ©_attr, &cattr, &i);
  193.   }
  194.   */
  195.   uis$set_background_index(&vd_id, &default_attr, &back_attr, &i0);
  196.   uis$set_writing_mode(&vd_id, &default_attr, &text_attr, &uis$c_mode_over);
  197.   uis$set_font(&vd_id,&text_attr,&text_attr,&a_font);
  198.   uis$set_char_size(&vd_id,&text_attr,&text_attr,&i0,&vws_hchar,&vws_vchar);
  199.   uis$set_line_style(&vd_id,&line_attr,&line_attr,&n1);
  200. }
  201.  
  202. /****************************************************************************/
  203.  
  204. TERM_PUBLIC void VWS_reset()
  205. {
  206.   uis$delete_display(&vd_id);
  207. }
  208. /****************************************************************************/
  209. TERM_PUBLIC int VWS_scale(xs,ys)
  210. double xs,ys;
  211. {
  212.   return FALSE;
  213. }
  214. /****************************************************************************/
  215. TERM_PUBLIC void VWS_graphics()
  216. {
  217.   uis$erase(&vd_id, &wc_xmin, &wc_ymin, &wc_xmax, &wc_ymax);
  218. }
  219. /****************************************************************************/
  220. TERM_PUBLIC void VWS_text()
  221. {
  222. }
  223. /****************************************************************************/
  224. TERM_PUBLIC void VWS_move(x,y)
  225. unsigned int x,y;
  226. {
  227.   current_x= (float)(x);
  228.   current_y= (float)(y);
  229. }
  230. /****************************************************************************/
  231. TERM_PUBLIC void VWS_vector(x,y)
  232. unsigned int x,y;
  233. {
  234.   int col;
  235.   int line_attr = LINE_ATTR;
  236.   float fx,fy;
  237.   fx=(float) x;
  238.   fy=(float) y;
  239.  
  240.   uis$line(&vd_id, &line_attr, ¤t_x, ¤t_y, &fx, &fy);
  241.   VWS_move (x,y);
  242. }
  243. /****************************************************************************/
  244. TERM_PUBLIC void VWS_linetype(lt)
  245. int lt;
  246. {
  247.   const int n1=0xFFFFFFFF;
  248.   const float p15=1.5, p20=2.0, p10=1.0;
  249.   long int lstyle[9] = { 0xffffffff,
  250.              0Xff00ff00,
  251.              0xffffff00,
  252.              0xffff0000,
  253.              0xf0f0f0f0,
  254.              0Xfff0fff0,
  255.              0xf000f000,
  256.              0xa5a5a5af,
  257.              0xf00f00f0 };
  258.   int line_attr = LINE_ATTR;
  259.  
  260.   switch(lt) {
  261.   case -1: uis$set_line_style(&vd_id,&line_attr,&line_attr,&n1);
  262.     uis$set_line_width(&vd_id,&line_attr,&line_attr,&p15);
  263.     break;
  264.   case -2: uis$set_line_style(&vd_id,&line_attr,&line_attr,&n1);
  265.     uis$set_line_width(&vd_id,&line_attr,&line_attr,&p20);
  266.     break;
  267. /*
  268.   default:  uis$set_line_style(&vd_id,&line_attr,&line_attr,&lstyle[lt % 8]);
  269.   makes part of curve disappear on my workstation
  270.   */
  271.   default:  uis$set_line_style(&vd_id,&line_attr,&line_attr,&n1);
  272.     uis$set_line_width(&vd_id,&line_attr,&line_attr,&p10);
  273.   }
  274. }
  275.  
  276. /****************************************************************************/
  277. static int justify_mode = CENTRE, up;
  278.  
  279. TERM_PUBLIC void VWS_put_text(x,y,str)
  280. unsigned int x,y;
  281. char* str;
  282. {
  283.   float fx,fy, thih, twid;
  284.   int text_attr = TEXT_ATTR;
  285.  
  286. /* uis$text parameter is descriptor string not character string */
  287.  
  288.   struct dsc$descriptor_s textline = {0,DSC$K_DTYPE_T,DSC$K_CLASS_S,""};
  289.  
  290.  
  291.   textline.dsc$a_pointer = str;
  292.   textline.dsc$w_length = strlen(textline.dsc$a_pointer);
  293.   uis$measure_text(&vd_id,&text_attr,&textline,&twid,&thih);
  294.   fx=(float)x;
  295.   fy=(float)y;
  296.  
  297.   switch (justify_mode) {
  298.   case LEFT : fy+=thih/2.;
  299.     break;
  300.   case RIGHT : fy+=thih/2.;
  301.     fx-=twid;
  302.     break;
  303.  
  304.   case CENTRE : fy+=thih/2.;
  305.     fx-=twid/2;
  306.     break;
  307.   };
  308.  
  309.   uis$text(&vd_id,&text_attr,&textline,&fx,&fy);
  310.   /* write to Example Viewport window */
  311.  
  312.  
  313. }
  314. /****************************************************************************/
  315. TERM_PUBLIC int VWS_text_angle(ang)
  316. int ang;
  317. {
  318.   float degrees;
  319.   int text_attr = TEXT_ATTR;
  320.   degrees=90.*(up=ang);
  321.   uis$set_text_slope (&vd_id, &text_attr, &text_attr, °rees);
  322.   return TRUE;
  323. }
  324. /****************************************************************************/
  325. TERM_PUBLIC int VWS_justify_text(mode)
  326. enum JUSTIFY mode;
  327. {
  328.   justify_mode=mode;
  329.   return TRUE;
  330. }
  331. /****************************************************************************/
  332. TERM_PUBLIC void VWS_point(x,y,point)
  333. unsigned int x,y;
  334. int point;
  335. {
  336.   do_point(x,y,point);
  337. }
  338. /****************************************************************************/
  339. TERM_PUBLIC void VWS_arrow(sx,sy,ex,ey,head)
  340. unsigned int sx,sy,ex,ey;
  341. int head;
  342. {
  343.   do_arrow(sx,sy,ex,ey,head);
  344. }
  345.  
  346. #endif /* TERM_BODY */
  347.  
  348. #ifdef TERM_TABLE
  349.  
  350. TERM_TABLE_START(vws_driver)
  351.     "VWS", "VAX Windowing System (UIS)",
  352.            VWS_XMAX, VWS_YMAX, VWS_VCHAR, VWS_HCHAR,
  353.            VWS_VTIC, VWS_HTIC, options_null, VWS_init, VWS_reset,
  354.            VWS_text, null_scale, VWS_graphics, VWS_move, VWS_vector,
  355.            VWS_linetype, VWS_put_text, VWS_text_angle,
  356.            VWS_justify_text, do_point, do_arrow, set_font_null
  357. TERM_TABLE_END(vws_driver)
  358.  
  359. #undef LAST_TERM
  360. #define LAST_TERM vws_driver
  361.  
  362. #endif /* TERM_TABLE */
  363. #endif /* TERM_PROTO_ONLY */
  364.  
  365. /*
  366.  * NAME: vws
  367.  *
  368.  * OPTIONS: none
  369.  *
  370.  * SUPPORTS: VAX Windowing System (UIS) 
  371.  *
  372.  * Further Info: none
  373.  *
  374.  */